package com.cccccc.contoller;

import com.cccccc.object.User;
import com.cccccc.object.UserIut;
import com.cccccc.result.Result;
import com.cccccc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import lombok.extern.slf4j.Slf4j;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import java.util.List;


/**
 * --- 代码敲对！ ---
 *
 * @author CCCccc
 * @create 2025/8/18
 * 备注：用户控制层
 */
@Slf4j
@RestController
@CrossOrigin // 允许跨域
public class UserContoller {
    // 自动注入
    @Autowired
    private UserService userService;


    /**
     * 用户登录
     */
    @PostMapping("/login")
    public Result login(@RequestBody User user) {
        String jwToken = userService.login(user.getUsername(), user.getPassword());

        if (jwToken != null) {
            return Result.success("登录成功", jwToken);
        }else {
            return Result.fail("用户名或密码错误",null);
        }
    }

    /**
     * 用户退出登录
     */
    @GetMapping("/user/quit")
    public Result quit() {
        log.info("退出登录");
        System.out.println("退出登录");
        // 退出登录
        userService.quit();
        return Result.success("退出登录成功",null);
    }

    /**
     * 查询用户
     */
    @GetMapping("/user")
    @PreAuthorize("hasAuthority('user:select')")
    public Result getUser(UserIut userIut,int pageNum, int pageSize) {
        log.info("查询用户"+"页码："+pageNum+"页大小："+pageSize);
        // 分页查询
        PageHelper.startPage(pageNum, pageSize);
        PageInfo<User> pageInfo = new PageInfo<>(userService.selectUser(userIut));
        // 输出当前页码
        log.info("当前页码："+pageInfo.getPageNum());
        // 输出当前页的记录数
        log.info("当前页的记录数："+pageInfo.getSize());
        // 输出总记录数
        log.info("总记录数："+pageInfo.getTotal());
        // 输出总页数
        log.info("总页数："+pageInfo.getPages());
        // 条件查询
        // 用户名
        log.info("username:"+userIut.getUsername()+"模糊查询");
        // 手机号
        log.info("phone:"+userIut.getPhone()+"模糊查询");
        // 开始时间
        log.info("开始时间:"+userIut.getValue1()+"模糊查询");
        // 结束时间
        log.info("结束时间:"+userIut.getValue2()+"模糊查询");


        if (pageInfo != null) {
            log.info("查询用户成功");
            return Result.success("查询成功",pageInfo);
        }
        log.info("查询用户失败");
        return Result.fail("查询失败",null);
    }

    /**
     * 删除用户(单个)
     */
    @GetMapping("/user/delete")
    @PreAuthorize("hasAuthority('user:del')")
    public Result deleteUser(Integer id) {
        log.info("删除用户"+"用户id："+id);
        int result = userService.deleteUser(id);
        if (result > 0) {
            log.info("删除用户成功");
            return Result.success("删除成功",null);
        }else {
            log.info("删除用户失败");
            return Result.fail("删除失败",null);
        }
    }

    /**
     * 删除用户(批量)
     */
    @GetMapping("/user/deletes")
    @PreAuthorize("hasAuthority('user:del')")
    public Result deleteUsers(@RequestParam List<Integer> ids) {
        log.info("删除用户"+"用户id："+ids);
        int result = userService.deleteUsers(ids);
        if (result > 0) {
            log.info("删除用户成功");
            return Result.success("删除成功",null);
        }else {
            log.info("删除用户失败");
            return Result.fail("删除失败",null);
        }
    }

    /**
     * 添加用户
     */
    @PostMapping("/user/add")
    @PreAuthorize("hasAuthority('user:add')")
    public Result addUser(@RequestBody User user) {
        log.info("添加用户"+"用户信息："+user);
        int result = userService.addUser(user);
        if (result > 0) {
            log.info("添加用户成功"+"用户名"+user.getUsername());
            return Result.success("添加成功",null);
        }else {
            log.info("添加用户失败");
            return Result.fail("添加失败",null);
        }
    }

    /**
     * 更改用户
     */
    @PostMapping("/user/update")
    @PreAuthorize("hasAuthority('user:update')")
    public Result updateUser(@RequestBody User user) {
        log.info("更改用户"+"用户信息："+user);
        int result = userService.updataUser(user);
        if (result > 0) {
            log.info("更改用户成功"+"用户名"+user.getUsername());
            return Result.success("更改成功",null);
        }else {
            log.info("更改用户失败");
            return Result.fail("更改失败",null);
        }
    }
}
